// PROGRAMA : CTLPA003
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 03/06/94
// OBJETIVO : ATUALIZAR CANCELAMENTO DE DOCS. OPCAO: 'ACI'
// ATUALIZACOES DATA
// PROGRAMA : CTLPA003 06/11/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DE TELA 29/09/1999
// : ACERTO DE DATA N6 PARA N8 04/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Ctlta003;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha02;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Ctlpa003 OBJETIVO : ATUALIZAR CANCELAMENTO DE DOCS. OPCAO: 'ACI' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/ctlpa003")
public class Ctlpa003 {
	// Estado Anterior;
	Ctlpa003 ctlta003nterior;
	// Views utilizadas
	SicControle vwDvecon = new SicControle();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Ctlta003 ctlta003;
	// Ctlta003B ctlta003B;
	Sistha02 sistha02;
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	private String faseproc = "0";

	private String chave;
	// private long ndemid;
	// private int datemi;
	// private int tipdoc;
	// private String nomdoc;
	// private String observ;
	private int datn;
	private int tido;

	private Ctlta003 preMapas() {
		ctlta003 = new Ctlta003(true, sessao);
		// ctlta003B = new Ctlta003B(true, sessao);
		sistha02 = new Sistha02(true, sessao);
		ctlta003.setDataCorrente(UtilBean.inverteDataCorrente());
		ctlta003.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		datn = UtilBean.obtemDataCorrente();
		estla001.esttip = 99;
		estla001.qde = 1;
		estla001.cpo = sessao.getSisgsisp().getVlt();
		return ctlta003;
	}

	public Ctlpa003(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Ctlta003 ctlta003, Sistha02 sistha02) {
		try {
			main(ctlta003, sistha02);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Ctlta003 pctlta003, Sistha02 psistha02) throws Exception {
		if (pctlta003 == null && pctlta003 == null && psistha02 == null) {
			primeiraVez = true;
			ctlta003 = preMapas();
			ctlta003.setNavegar("../ctlpa003/executar");
			result.include("ctlta003", ctlta003);
			ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			sessao.setAtributo("CTLPA003", this);
			return;
		} else {
			restaurarEstados(pctlta003, psistha02);
		}

		switch (faseproc) {
		case "0": {
			ctlta003.receberTela(false, result);
			if (!ctlta003.getOperacao().equals("ACI")) {
				saida();
				return;
			}

			if (ctlta003.getTipdoc() == 44) {
				if (sessao.getSisgsisp().getVar() != 07) {
					ctlta003.enviarMensagem("tipdoc", "TIPO DOCUMENTO NAO PERTENCE A ROUBO/FURTO");
					sessao.setAtributo("CTLPA003", this);
					result.include("ctlta003", ctlta003);
					ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}

			} else {
				if (sessao.getSisgsisp().getVar() != 13) {
					ctlta003.enviarMensagem("tipdoc", "TIPO DOCUMENTO NAO PERTENCE AO INSTITUTO");
					sessao.setAtributo("CTLPA003", this);
					result.include("ctlta003", ctlta003);
					ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}

			}
			funcoes.tabsatu(sessao);
			if (!funcoes.camret.equals("")) {
				ctlta003.enviarMensagem(funcoes.camret, "");
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			switch (ctlta003.getTipdoc()) {
			case 81: {
				tido = 82;
				break;
			}
			case 87: {
				tido = 88;
				break;
			}
			case 90: {
				tido = 89;
				break;
			}
			case 92: {
				tido = 91;
				break;
			}
			case 44: {
				tido = 43;
				break;
			}
			default: {
				break;
			}
			}

			vwDvecon.pesquisaNumeroDocumentoTipoDocumento(ctlta003.getNdemid(), tido);
			this.ctlta003.setMensagemSaida("TECLE PF5 PARA CANCELAR");
			if (vwDvecon.totalRegistros() > 1) {
				this.ctlta003.enviarMensagem("", UtilBean.concatena("NUMERO DO DOC.", vwDvecon.totalRegistros(), "TECLE PF5 P/CONFIRMAR"));
				achar1();
				faseproc = "1";
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				this.ctlta003.enviarTelaComplemento("diacntchassi", result, getClass().getSimpleName().toUpperCase());
				return;
			}
			vwDvecon.pesquisaNumeroDocumentoTipoDocumento(ctlta003.getNdemid(), ctlta003.getTipdoc());
			this.ctlta003.setMensagemSaida("TECLE PF5 PARA CANCELAR");
			if (vwDvecon.totalRegistros() > 1) {
				this.ctlta003.enviarMensagem("", UtilBean.concatena("NUMERO DO DOC.", vwDvecon.totalRegistros(), "TECLE PF5 P/CONFIRMAR"));
				achar1();
				faseproc = "2";
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				this.ctlta003.enviarTelaComplemento("diacntchassi", result, getClass().getSimpleName().toUpperCase());
				return;
			}

			faseproc = "3";
			sessao.setAtributo("CTLPA003", this);
			result.include("sistha02", sistha02);
			this.sistha02.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		case "1": {
			ctlta003.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				faseproc = "0";
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				this.ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				ctlta003.setMensagemSaida(ctlta003.getMensagem());
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				ctlta003.enviarTelaComplemento("diacntchassi", result, getClass().getSimpleName().toUpperCase());
				return;
			}
			while (vwDvecon.pesquisaNumeroDocumentoTipoDocumento(ctlta003.getNdemid(), tido)) {
				achar2();
				move();
				vwDvecon.atualiza();
				// //dao.commit();
			}
			faseproc = "0";
			vwDvecon.fecha();
			sessao.setAtributo("CTLPA003", this);
			result.include("ctlta003", ctlta003);
			this.ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		case "2": {
			ctlta003.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				faseproc = "0";
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				this.ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				ctlta003.setMensagemSaida(ctlta003.getMensagem());
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				ctlta003.enviarTelaComplemento("diacntchassi", result, getClass().getSimpleName().toUpperCase());
				return;
			}
			while (vwDvecon.pesquisaNumeroDocumentoTipoDocumento(ctlta003.getNdemid(), ctlta003.getTipdoc())) {
				achar2();
				move();
				vwDvecon.atualiza();
				// //dao.commit();
			}
			faseproc = "0";
			vwDvecon.fecha();
			sessao.setAtributo("CTLPA003", this);
			result.include("ctlta003", ctlta003);
			this.ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		case "3": {

			sistha02.receberTela(false, result);
			if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				this.ctlta003.enviarMensagem(null, "TECLE PF5 P/ATUALIZAR");
				sessao.setAtributo("CTLPA003", this);
				result.include("sistha02", sistha02);
				sistha02.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			this.ctlta003.enviarMensagem(null, UtilBean.concatena("CANCELAMENTO EFETUADO OK.", ctlta003.getNdemid()));
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				ctlta003.setMensagemSaida("ALTERACAO NAO FOI EXECUTADA");
				sessao.setAtributo("CTLPA003", this);
				result.include("ctlta003", ctlta003);
				ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			move();
			vwDvecon.grava();
			// //dao.commit();
			faseproc = "0";
			sessao.setAtributo("CTLPA003", this);
			result.include("ctlta003", ctlta003);
			this.ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		}

		sessao.setAtributo("CTLPA003", this);
		result.include("ctlta003", ctlta003);
		ctlta003.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	} // IF *PF-KEY NE 'PF3'
		// CALLNAT 'ESTNA001' CPO ESTTIP QDE VLT MATRIC
		// END-IF

	private void move() {
		vwDvecon.setNumeroDocumento(ctlta003.getNdemid());
		vwDvecon.setTipoDocumento(ctlta003.getTipdoc());
		vwDvecon.setMatriculaFunc(sessao.getSisgsisp().getMatric());
		vwDvecon.setEnderecoRequerente(ctlta003.getObserv());
		vwDvecon.setDataEmissao(datn);
	}

	private void achar1() throws Exception {
		ctlta003.setDatemi(0);
		ctlta003.setNomdoc("");
		ctlta003.setDatemi(vwDvecon.getDataEmissao());
		ctlta003.setDatemi(funcoes.sissd002(ctlta003.getDatemi()));
		vwTabele.pesq = UtilBean.moveSubstring(vwTabele.pesq, 0, 3, "N", 19);
		vwTabele.pesq = UtilBean.moveSubstring(vwTabele.pesq, 3, 12, "N", vwDvecon.getTipoDocumento());
		vwTabele.chalfa = funcoes.sisst002(19, vwDvecon.getTipoDocumento(), vwTabele.chalfa);
		ctlta003.setNomdoc(vwTabele.chalfa);

		// ctlta003.enviarTelaComplementar(false, result);
	}

	private void achar2() {
		if (UtilBean.funcao.equals(UtilBean.ctt_confirma))
		// TELA PARA CONFIRMAR OPERACAO
		{
			ctlta003.enviarMensagem(null, UtilBean.concatena("CANCELAMENTO EFETUADO OK.", ctlta003.getNdemid()));
		}

		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			ctlta003.setMensagemSaida("ALTERACAO NAO FOI EXECUTADA");
		}

	}

	private void saida() {
		// CHAMA PROGRAMA DE ACORDO COM OPERACAO
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Ctlta003 pctlta003, Sistha02 psistha02) {
		this.ctlta003nterior = (Ctlpa003) sessao.getAtributo("CTLPA003");
		if (pctlta003 != null) {
			ctlta003 = pctlta003;
		} else {
			ctlta003 = this.ctlta003nterior.ctlta003;
		}
		ctlta003.setSessao(sessao);
		if (psistha02 != null) {
			sistha02 = psistha02;
		} else {
			sistha02 = this.ctlta003nterior.sistha02;
		}
		sistha02.setSessao(sessao);
		this.faseproc = this.ctlta003nterior.faseproc;
	}
}
